
//2653.滑动子数组的美丽值
class Solution {
    public:
        #define N 50
        //求第x小的数
        int GetMinK(int* count,int x)
        {
            for(int i=0;i<2*N+1;i++)
            {
                if(count[i]!=0) x-=count[i];
                if(x<=0) return i;
            }
            return 0;
        }
        vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x) {
            //此题的nums[i]的数据范围较小，所以可以通过计数排序的方法进行求第小的数
            int count[2*N+1]={0};
            //进行计数排序
            int left=0,right=0,n=nums.size();
            vector<int> ret;
            while(right<n)
            {
                //入窗口
                while(right-left<k)
                    count[nums[right++]+N]++;
    
                //调整答案
                int a=GetMinK(count,x)-50;
                if(a<0) ret.push_back(a);
                else ret.push_back(0);
    
                //出窗口
                count[nums[left++]+N]--;
            }
            return ret;
        }
    };